#include "AdParesLogic.h"
#include "AdDao.h"
#include "stdio.h"
#include <glib.h>
#define LOCAL_PATH "/home/guoxi/ronghua_ads/media"
#include "CurlRequestUtil.h"

// 根据广告资源信息生成本地路径
char* getResPath(AdResource *ar)
{
    int adId = ar->ad_id;
    char* path = ar->path;
    //http://47.109.65.208/images/20.png
    char* fileName = g_path_get_basename(path);
    char* formatStr = "%s/%d_%s";

    return g_strdup_printf(formatStr,LOCAL_PATH,adId,fileName);
}

// 下载广告资源文件到本地
int downloadAdsAndGenLocalAdListToSqlite(Ad* ads[],int size)
{
    // 默认是不需要更新的
    int result = 0; 
    // 遍历广告数组，并查询数据库看有没有该广告
    for(int i=0;i<size;i++)
    {
        Ad *ad = ads[i];
        int adId = ad->id;
        // 根据广告id查询数据库中是否有该广告
        Ad *adFromDb = getAd(adId);
        // 如果这个广告不存在，那么就需要下载到本地列表中
        if(adFromDb == NULL)
        {
            // 如果这个广告是新的，那么qt进程就一定要更新播放列表
            result = 1;
            // 将广告信息存入数据库
            saveAd(ad);
            // 处理广告资源信息
            for(int j=0;j<3;j++)
            {
                AdResource *ar = ad->resources[j];
                if(ar != NULL)
                {
                    // 根据广告资源信息生成本地路径
                    char* resPath = getResPath(ar);

                    // 下载线上资源文件到指定路径
                    // 1 判断resPath的文件是否存在，如果文件不存在需要先创建文件
                    // 2 下载线上资源到这个文件-读取线上资源文件的流，写到本地文件中
                    int res = downloadRes(ar->path,resPath);
                    if(res == -1)
                    {
                        printf("文件下载失败\n");
                        continue;
                    }

                    // 修改ar.path=本地路径
                    ar->path = resPath;

                    // 存入数据库
                    saveAr(ar);
                }
            }
        }else{
            // 如果这个广告存在
            // 先更新数据库中的广告信息
            updateAd(ad);
            // 遍历广告资源信息
            for(int j=0;j<3;j++)
            {
                AdResource *ar = ad->resources[j];
                if(ar == NULL)
                {
                    continue;
                }
                // 看这个文件是否发生改变
                char* sign = ar->sign;  // 获取服务器响应回来的加密后的字符串
                // 获取本地路径
                char* localPath = getResPath(ar);
                // 判断本地路径的文件是否存在
                gboolean exists = g_file_test(localPath,G_FILE_TEST_EXISTS);
                if(!exists)
                {
                    // 如果文件不存在，那么就要下载到本地
                    result = 1;
                    downloadRes(ar->path,localPath);
                    ar->path = localPath;
                    updateAr(ar);
                }else{
                    // 如果文件存在，那么就要判断文件是否发生改变
                    // 正常需要对文件进行md5加密，然后跟服务器的md5进行对比
                    // char* localFIleSign = getMd5(localPath);
                    // 我们的服务器没有提供md5加密，所以就直接用一个字符串代替
                    char* localFileSign = "jfjjfjfjj";
                    if(!g_str_equal(sign,localFileSign))
                    {
                        // 文件发生改变，那么就要下载到本地
                        result = 1;
                        downloadRes(ar->path,localPath);
                        ar->path = localPath;
                        updateAr(ar);
                    }else{
                        printf("当前媒体资源没有更新，本次不做处理!\n");
                    }
                }
            }
        }
    }

    return result;
}